package com.bsj.travel.mapper.mysql;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.bsj.travel.def.common.DO.DeviceDO;
import com.bsj.travel.def.common.DTO.web.device.DeviceParamDTO;
import com.bsj.travel.def.common.DTO.web.device.DeviceSearchDTO;
import com.bsj.travel.def.common.VO.device.DeviceVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author yinhao
 * @version 1.0
 * @description 设备信息相关
 * @date 2023/11/14
 */
@Repository
@DS("master")
public interface DeviceMapper {

    /**
     * 创建设备表
     *
     * @param tabName
     * @return
     */
    int createDevTab(String tabName);

    /**
     * 删除对应设备表
     *
     * @param tabName
     * @return
     */
    int deleteDevTab(String tabName);

    /**
     * 获取设备表中是否存在设备
     *
     * @param map
     * @return
     */
    long selectDeviceAllCount(Map<String, String> map);

    /**
     * 统计设备号是否存在
     *
     * @param deviceSearchDTO
     * @return java.lang.Integer
     * @author ljx
     * @time 2024/1/15 16:09
     */
    Integer countByCondition(DeviceSearchDTO deviceSearchDTO);

    /**
     * 添加设备
     *
     * @param deviceDO
     * @return java.lang.Integer
     * @author ljx
     * @time 2024/1/15 17:02
     */
    Integer insert(DeviceDO deviceDO);

    /**
     * 根据设备id集查询设备号
     *
     * @param tableName
     * @param deviceIds
     * @return java.util.List<java.lang.String>
     * @author ljx
     * @time 2024/1/15 19:31
     */
    List<String> selectDeviceNameByDeviceIds(@Param("tableName") String tableName, @Param("deviceIds") List<Long> deviceIds);

    /**
     * 删除设备
     *
     * @param tableName
     * @param deviceIds
     * @return void
     * @author ljx
     * @time 2024/1/15 19:31
     */
    void delete(@Param("tableName") String tableName, @Param("deviceIds") List<Long> deviceIds);

    /**
     * 按设备号删除设备
     *
     * @param tableName
     * @param deviceNames
     * @return
     * @author ljx
     * @time 2024/4/8 11:51
     */
    void deleteByDeviceNames(@Param("tableName") String tableName, @Param("deviceNames") List<String> deviceNames);

    /**
     * 根据设备id查询设备信息
     *
     * @param tableName
     * @param deviceId
     * @return com.bsj.travel.def.common.DO.DeviceDO
     * @author ljx
     * @time 2024/1/16 9:33
     */
    DeviceDO selectById(@Param("tableName") String tableName, @Param("deviceId") Long deviceId);

    /**
     * 根据设备di修改设备
     *
     * @param deviceDO
     * @return java.lang.Integer
     * @author ljx
     * @time 2024/1/16 9:33
     */
    Integer updateById(DeviceDO deviceDO);

    /**
     * 设备分页
     *
     * @param deviceSearchDTO
     * @return java.util.List<com.bsj.travel.def.common.VO.device.DeviceVO>
     * @author ljx
     * @time 2024/1/16 11:13
     */
    List<DeviceVO> selectDevicePage(DeviceSearchDTO deviceSearchDTO);

    /**
     * 是否禁用
     *
     * @param deviceParamDTO
     * @return java.lang.Integer
     * @author ljx
     * @time 2024/1/16 11:40
     */
    Integer whetherToDisable(DeviceParamDTO deviceParamDTO);

    /**
     * 根据设备号集查询设备号
     *
     * @param tableName
     * @param deviceNames
     * @return java.util.List<java.lang.String>
     * @author ljx
     * @time 2024/1/16 15:50
     */
    List<String> selectDeviceNameByDeviceNames(@Param("tableName") String tableName, @Param("deviceNames") List<String> deviceNames);

    /**
     * 批量添加设备
     *
     * @param tableName
     * @param deviceDOS
     * @return void
     * @author ljx
     * @time 2024/1/16 16:35
     */
    void batchAddDevice(@Param("tableName") String tableName, @Param("deviceDOS") List<DeviceDO> deviceDOS);

    /**
     * 根据设备号查询设备信息
     *
     * @param tableName
     * @param deviceName
     * @return java.lang.String
     * @author ljx
     * @time 2024/3/22 14:44
     */
//    String selectByDeviceName(@Param("tableName") String tableName, @Param("deviceName") String deviceName);

    /**
     * 批量更新设备信息
     *
     * @param deviceDOS
     */
    void batchUpdateDevice(@Param("deviceDOS") List<DeviceDO> deviceDOS);

    /**
     * 模糊搜索设备号
     *
     * @param tableName
     * @param value
     * @return java.util.List<java.lang.String>
     * @author ljx
     * @time 2024/3/20 19:29
     */
    List<String> fuzzySearchDeviceName(@Param("tableName") String tableName, @Param("value") String value);

    /**
     * 根据设备号查询设备信息
     *
     * @param tableName
     * @param deviceName
     * @return
     * @author ljx
     * @time 2024/4/8 14:00
     */
    DeviceDO selectByDeviceName(@Param("tableName") String tableName, @Param("deviceName") String deviceName);

    /**
     * 根据设备号集查询设备信息
     *
     * @param tableName
     * @param deviceNames
     * @return
     * @author ljx
     * @time 2024/4/8 14:38
     */
    List<DeviceDO> selectByDeviceNames(@Param("tableName") String tableName, @Param("deviceNames") List<String> deviceNames);

    /**
     * 更新设备备注
     * @param deviceDO
     * @return
     */
    Integer updateRemark(DeviceDO deviceDO);
}
